package com.dhl.cloud.controller;

import javax.servlet.http.HttpServletRequest;

import com.auth0.jwt.JWT;
import com.auth0.jwt.exceptions.JWTDecodeException;
import com.auth0.jwt.interfaces.DecodedJWT;
import com.dhl.cloud.common.Constants;
import com.dhl.cloud.common.http.HttpUser;
import com.dhl.cloud.common.util.StringUtils;


/**
 * 封装基本的用户信息，主要是用户登录名以及租户ID
 * 每次交互都可以从request从获取token，然后再返回对应的用户bean
 *
 */
public class BaseController {

	/**
	 * 获取用户
	 */
	public HttpUser getUser(HttpServletRequest request)
	{
		String token = request.getHeader(Constants.HEADER_PLAT_TOKEN);
		if (StringUtils.isBlank(token)){
			return null;
		}
		String username = getUsername(token);
		String tenantid = getTenantid(token);
		return new HttpUser(username,tenantid);
	}

	public HttpUser getUser(String token)
	{
		if (StringUtils.isBlank(token)){
			return null;
		}
		String username = getUsername(token);
		String tenantid = getTenantid(token);
		return new HttpUser(username,tenantid);
	}
	
	
	/**
     * 获得token中的信息无需secret解密也能获得
     *
     * @return token中包含的用户名
     */
    private String getUsername(String token) {
        try {
            DecodedJWT jwt = JWT.decode(token);
            return jwt.getClaim("username").asString();
        } catch (JWTDecodeException e) {
            return null;
        }
    }
 
    /**
     * 获得token中的信息无需secret解密也能获得
     *
     * @return token中包含的用户租户ID
     */
    private String getTenantid(String token) {
        try {
            DecodedJWT jwt = JWT.decode(token);
            return jwt.getClaim("tenantid").asString();
        } catch (JWTDecodeException e) {
            return null;
        }
    }
}
